from config import Config
from rabbitmq_client import RabbitMQConsumer
from message_processor import MessageProcessor

def callback(ch, method, properties, body):
    """消息处理回调函数"""
    print(f"收到消息: {body[:100]}...")
    
    try:
        # 根据路由键处理不同类型的消息
        if method.routing_key.startswith('task'):
            MessageProcessor.process_task_message(body)
        elif method.routing_key.startswith('event'):
            print(f"处理事件消息: {body.decode('utf-8')[:100]}...")
        else:
            print(f"未知类型的消息: {body.decode('utf-8')[:100]}...")
            
        # 确认消息处理完成
        ch.basic_ack(delivery_tag=method.delivery_tag)
        
    except Exception as e:
        print(f"处理消息时发生错误: {e}")
        # 拒绝消息并重新入队
        ch.basic_nack(delivery_tag=method.delivery_tag, requeue=True)

def main():
    """消费者示例"""
    # 创建消费者实例
    consumer = RabbitMQConsumer(Config.as_dict())
    
    try:
        # 消费任务队列
        consumer.consume(queue='task_queue', callback=callback)
        
        # 消费事件队列（可以使用多线程同时消费多个队列）
        # consumer.consume(queue='event_queue', callback=callback)
        
    except KeyboardInterrupt:
        print("\n程序被用户中断")
    finally:
        # 关闭连接
        consumer.close()

if __name__ == "__main__":
    main()    